package moreApi.src.lambda;

/**
 * lambda表达式就是用来简化匿名内部类的
 * 被重写的必须是函数类接口,且只能有一个抽象方法
 */
public class LambdaDemo {
    public static void main(String[] args) {
//        Swimming s1 = new Swimming() {
//            @Override
//            public void swim() {
//                System.out.println("执行中");
//            }
//        };
        Swimming s1 = () -> {//这个写法和上面的作用一样,简化了匿名内部类
                System.out.println("执行中");
        };
        go(s1);
        //为了进一步的简化,可以直接将lambda表达式写到形参表中
        go(() -> System.out.println("执行中"));
    }
    public static void go(Swimming s){
        System.out.println("action");
        s.swim();
        System.out.println("cut");
    }
}
//一旦加上这个注解就必须是函数式接口,方法过多会报错
@FunctionalInterface
interface Swimming{
    abstract void swim();
}